你知道Remote Code Execution很嚴重,但你知道有哪些可以觸發RCE嗎?
只要能夠Remote Code Execution,通常會被評斷為高危漏洞,這是因為攻擊者可以藉此在Server上遠程執行,當然RCE並非只能透過Web才能夠觸發,但本篇只專注在Web Application上。
其中一個造成RCE的類型就是動態的程式碼執行,這也是大多數觸發RCE的方法。動態程式碼執行的意思是 - 程式碼會從某些地方(例如使用者輸入)獲取參數並執行它。從攻擊者的角度來說,只要你的Web Application存在與使用者互動的地方,就都有可能是一個進入點,這包含一般常見的網站提供的欄位、GET/POST Request中的各種欄位,如Headers,request body等等。
透過撰寫能夠與Web Application/Web Server溝通的程式碼,使應用程式執行這些惡意程式碼,獲得Initial access。
這種方式可能是直接、間接甚至是組合的。
這種方式最好理解,例如Command Injection:
ping.php
<?php
$cmd = "ping ".$GET['ip'];
$result = exec($cmd);
這邊的command是由兩個部分組成,ping
和url參數ip
。
這就代表將會被執行的命令其實完全取決於用戶input。
可以想像假設攻擊者發出一個請求:
http://example.com/?ip=127.0.0.1;cat%20%2Fetc%2Fpasswd
就會將Linux Server上的/etc/passwd print出來,也就理所當然可以將它替換成Reverse Shell取得Server的權限。
我也曾經看過一個案例是,利用touch指令,建立一個特殊檔案名稱的file name,使網站應用程式在讀取filename時,也執行了後面的程式碼,將當下目錄檔案資訊的result,在網站頁面中呈現
或像是透過之前[Day16]的Arbitrary File Upload上傳Web Shell,再進行RCE。
一個簡單的例子是從SQL Injection升級到RCE,例如下面這個payload:SELECT "<?php system($REQUEST['cmd']);?>" INTO OUTFILE "/var/www/html/xxx.php"
就是利用SQL中的一些特殊功能,寫入一個Web Shell到Web Server上,造成RCE,或是使用LOAD_FILE
去讀取特定系統的文件等等,達成部分的程式碼執行。
另一個例子就是insecure Deserialization,不安全的反序列化也有可能做到RCE。
WordPress Privilege Escalation via REST API to Administrator leads to RCE
Paypal RCE via npm misconfig -- installing internal libraries from the public registry